﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Runtime.InteropServices;
using CRUD.DAO;
using CapaGestion.Spring;
using GestionadorBaseDatos;
using CapaNegocios;

public partial class InterfazKamalde_Administracion : Base
{
    public IGestionEvento gestionEvento = AdministradorGestion.getGestionarEvento();
    public static Categoria categoriaSeleccionada;
    public static IList participantesSeleccionados = new ArrayList();
    public static IList categoriaLista;
    public string nombreEvento;
    public int mayor;
    protected void Page_Load(object sender, EventArgs e)
    {
        error.Text = " ";
         if (Session["login"] == null)
        {
            Response.Redirect("login.aspx");

        }
         else if (((Usuario)Session["login"]).Estado == "ADMINISTRADOR")
         {
             if (!IsPostBack)
             {
                 categoriaSeleccionada = new Categoria();
                 categoriaLista = gestionEvento.categorias();
                 llenarComboCategorias(categoriaLista);
                 comboParticipantes.Items.Add("Seleccione participantes");
                 nombreEvento = "";

             }
         }
         else
         {
             Response.Redirect("Inicio.aspx");
         }
    }


    protected void llenarComboCategorias(IList categoria)
    {
        int numeroCategorias = categoria.Count;
        comboCategoria.Items.Add("Seleccione Categoria");
        for (int i = 0; i < numeroCategorias; i++)
        {
            comboCategoria.Items.Add(((Categoria)categoria[i]).Nombre);
        }
    }
    protected void comboCategoria_TextChanged(object sender, EventArgs e)
    {
        agregarParticipante.Visible = true;
        categoriaSeleccionada = (Categoria)categoriaLista[comboCategoria.SelectedIndex - 1];
        comboParticipantes.Visible = true;
        comboParticipantes.Items.Clear();
        comboParticipantes.Items.Add("Seleccione participantes");
        int numeroParticipantes = categoriaSeleccionada.ListaParticipantes.Count;
        for (int i = 0; i < numeroParticipantes; i++)
        {
            comboParticipantes.Items.Add(((Participante)categoriaSeleccionada.ListaParticipantes[i]).Nombre);
        }


    }
    protected void comboParticipantes_TextChanged(object sender, EventArgs e)
    {
        categoriaSeleccionada.IdCategoria = comboCategoria.SelectedIndex;
        categoriaSeleccionada = gestionEvento.categoriaId(categoriaSeleccionada);
    }
    protected void cancelar_Click(object sender, EventArgs e)
    {
        comboCategoria.Enabled = true;
        nombreEvento = "";
        participantesSeleccionados.Clear();
        listaParticipantes.Items.Clear();
    }
    protected void confirmar_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(3000);
        if (participantesSeleccionados.Count > 1)
        {
            for (int i = 0; i < participantesSeleccionados.Count; i++)
            {
                if (i != participantesSeleccionados.Count - 1)
                {
                    nombreEvento = nombreEvento + ((Participante)participantesSeleccionados[i]).Nombre + " VS ";
                }
                else
                {
                    nombreEvento = nombreEvento + ((Participante)participantesSeleccionados[i]).Nombre;
                }
            }
            Evento agregarEvento = new Evento();
            int day = int.Parse(dia.SelectedItem.Text);

            int month = int.Parse(mes.SelectedValue);

            int year = int.Parse(anho.Text);

            DateTime fecha = new DateTime(year, month, day);
            agregarEvento.FechaIniApuesta = fecha;
            agregarEvento.FechaHoraMaxApuesta = fecha;
            agregarEvento.FechaEvento = fecha;
            agregarEvento.NombreEvento = nombreEvento;
            agregarEvento.CategoriaAsociada = categoriaSeleccionada;
            agregarEvento.Estatus = "ACTIVO";
            gestionEvento.Insert(agregarEvento);
            nombreEvento = "";
            int idEvento = gestionEvento.GetAll().Count;
            agregarEvento.IdEvento = idEvento;
            int propor = ((Participante)participantesSeleccionados[0]).Proporcion;
            int propor2 = ((Participante)participantesSeleccionados[1]).Proporcion;
            int proporGanador;
            int proporEmpate;
            if (propor > propor2)
            {
                proporGanador = (propor - propor2) * 2;
                proporEmpate = (propor - propor2);
                mayor = 0;

            }
            else
            {
                proporGanador = (propor2 - propor) * 2;
                proporEmpate = (propor2 - propor);

                mayor = 1;
            }
            for (int i = 0; i < participantesSeleccionados.Count; i++)
            {
                Proporcion agregarProporcion = new Proporcion();
                agregarProporcion.EventoAsociado = agregarEvento;
                agregarProporcion.Participante = (Participante)participantesSeleccionados[i];

                agregarProporcion.Ganador = "0";
                if (((mayor == 0) & (i == 0)) || ((mayor == 1) & (i == 1)))
                {
                    agregarProporcion.ProporcionParticipante = 1;
                    agregarProporcion.ProporcionEmpate = 1 / 2;
                }
                else
                {
                    agregarProporcion.ProporcionParticipante = proporGanador;
                    agregarProporcion.ProporcionEmpate = proporEmpate;
                }

                gestionEvento.insertarProporcion(agregarProporcion);

            }
            categoriaSeleccionada = null; ;
            participantesSeleccionados.Clear();


            listaParticipantes.Items.Clear();

        }
        else
        {
            error.Text = "No se puedo crear el evento. Debe agregar mas de un participante";
        }
    }
    protected void agregarParticipante_Click(object sender, EventArgs e)
    {
        int a = 0;
        for (int i = 0; i < participantesSeleccionados.Count; i++)
        {
            if ((((Participante)participantesSeleccionados[i]).Nombre) == comboParticipantes.Items[comboParticipantes.SelectedIndex].Text)
            {
                a = 1;
            }
        }
        if ((a == 0) & (comboParticipantes.SelectedIndex != 0))
        {
            comboCategoria.Enabled = false;
            listaParticipantes.Visible = true;
            cancelar.Visible = true;
            excluir.Visible = true;
            confirmar.Visible = true;
            participantesSeleccionados.Add(((Participante)categoriaSeleccionada.ListaParticipantes[comboParticipantes.SelectedIndex - 1]));
            listaParticipantes.Items.Add(((Participante)categoriaSeleccionada.ListaParticipantes[comboParticipantes.SelectedIndex - 1]).Nombre);

        }
    }
    protected void excluir_Click(object sender, EventArgs e)
    {
        if (listaParticipantes.SelectedIndex >= 0)
        {
            participantesSeleccionados.RemoveAt(listaParticipantes.SelectedIndex);
            listaParticipantes.Items.RemoveAt(listaParticipantes.SelectedIndex);
        }
    }
}
